
package com.jf.cloud.flow.service;

import cn.hutool.core.date.DateTime;
import com.jf.cloud.api.product.dto.ProdEffectDTO;
import com.jf.cloud.api.product.vo.ProdEffectRespVO;
import com.jf.cloud.common.database.dto.PageDTO;
import com.jf.cloud.common.database.vo.PageVO;
import com.jf.cloud.flow.dto.FlowLogDTO;
import com.jf.cloud.flow.model.ProductAnalyse;
import com.jf.cloud.flow.vo.FlowProdEffectDataExcelVO;
import com.jf.cloud.flow.vo.ShopFlowInfoVO;

import java.util.List;

/**
 * 流量分析—商品分析
 *
 * @author zz
 * @date 2021-05-21 15:25:19
 */
public interface ProductAnalyseService {

    /**
     * 分页获取流量分析—商品分析列表
     *
     * @param pageDTO 分页参数
     * @return 流量分析—商品分析列表分页数据
     */
    PageVO<ProductAnalyse> page(PageDTO pageDTO);

    /**
     * 根据流量分析—商品分析id获取流量分析—商品分析
     *
     * @param productAnalyseId 流量分析—商品分析id
     * @return 流量分析—商品分析
     */
    ProductAnalyse getByProductAnalyseId(Long productAnalyseId);

    /**
     * 保存流量分析—商品分析
     *
     * @param productAnalyse 流量分析—商品分析
     */
    void save(ProductAnalyse productAnalyse);

    /**
     * 更新流量分析—商品分析
     *
     * @param productAnalyse 流量分析—商品分析
     */
    void update(ProductAnalyse productAnalyse);

    /**
     * 根据流量分析—商品分析id删除流量分析—商品分析
     *
     * @param productAnalyseId 流量分析—商品分析id
     */
    void deleteById(Long productAnalyseId);

    /**
     * 统计商品信息
     *
     * @param flowLogList
     */
    void statisticalProduct(List<FlowLogDTO> flowLogList);

    /**
     * 获取商品洞察-商品效果分析
     *
     * @param pageDTO       分页参数
     * @param prodEffectDTO 筛选参数
     * @return 商品效果分析数据
     */
    PageVO<ProdEffectRespVO> getProductEffect(PageDTO pageDTO, ProdEffectDTO prodEffectDTO);

    /**
     * 获取商品洞察导出数据
     * @param pageDTO
     * @param prodEffectDTO
     * @return
     */
    List<FlowProdEffectDataExcelVO> listProdEffectExcel(PageDTO pageDTO, ProdEffectDTO prodEffectDTO);

    /**
     * 获取店铺流量排行榜
     *
     * @param endTime  结束时间
     * @param dayCount 天数
     * @param limit    条数
     * @return
     */
    List<ShopFlowInfoVO> listShopRankIngByFlow(DateTime endTime, Integer dayCount, Integer limit);

    /**
     * 删除商品统计数据
     *
     * @param spuId 商品id
     */
    void deleteSpuDataBySpuId(Long spuId);

    /**
     *  获取供应商店铺流量信息和近30天的商品访问流量排行榜
     * @param supplierId  供应商Id
     * @param endTime  结束时间
     * @param dayCount 天数
     * @param limit    排行榜条数
     * @return
     */
    ShopFlowInfoVO getSupplierFlowInfoAndProdRankIng(Long supplierId, DateTime endTime, Integer dayCount, Integer limit);
}
